////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2011-2012 www.iflytek.com. All Rights Reserved.
//  This software for customer relationship management system, developed by Noo team.
//  Software code and design for the team, copy rights reserved.
////////////////////////////////////////////////////////////////////////////////

package com.iflytek.ci.cums.service;

import com.iflytek.ci.cums.domain.Account;
import com.iflytek.framework.pagination.PaginationCriteria;
import com.iflytek.framework.pagination.PaginationResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * .
 * </p>
 *
 * @author poplar.yfyang
 * @version 1.0 2012-10-26 4:32 PM
 * @since JDK 1.5
 */
public interface AccountService {
	/**
	 * 根据帐号名称获取帐号信息
	 *
	 * @param name 帐号名称
	 * @return 帐号
	 */
	Account accountWithName(String name);

	/**
	 * 新增加一个帐号
	 *
	 * @param account 帐号信息
	 * @return 新的帐号主键ID
	 */
	long addAccount(Account account);

	/**
	 * 分页查询所有的帐号
	 *
	 * @param criteria 分页信息
	 * @return 帐号信息，分页显示
	 */
	PaginationResult<Account> findAccounts(PaginationCriteria criteria);

	/**
	 * 删除1个或者多个帐号信息
	 *
	 * @param id_array 帐号ID，1个或者多个
	 */
	void deleteAccount(String[] id_array);

	/**
	 * 执行修改帐号
	 *
	 * @param account 帐号信息
	 */
	void updateAccounts(Account account);

	/**
	 * 根据ID获取帐号信息
	 *
	 * @param id 帐号ID
	 * @return 帐号信息
	 */
	Account fromId(long id);

	/**
	 * 获取所有开发组长的信息
     *
	 * @return 开发组长的帐号信息
	 */
	List<Account> allLeaders();

	/**
	 * 根据检索值检索内容，可以按用户名来检索
     *
	 * @param criteria 分页参数
	 * @param search 查询内容
	 * @return 用户分页信息
	 */
	PaginationResult<Account> fuzzy_search(PaginationCriteria criteria, String search);
	
	/**
	 * 获取所有人员信息
     *
	 * @return all account
	 */
	List<Account> get_all();
	
	/**
	 * 根据多个账户id查询这多个id相对于的账户名字
     *
	 * @param  ids      one or more account's id.
	 * @return 账户列表
	 */
	List<Account> get_name(String[] ids);
	
	/**
	 * 根据多个账户的login查询这多个id相对于的账户名字
	 * @param  login      one or more account's login.
	 * @return string 类型的账户名列表
	 */
	List<String> get_names(String[] login);

	/**
	 * 修改用户密码
	 *
	 * @param account 用户帐号信息
	 */
	void chpwd(Account account);

	/**
	 * 通过上传Excel导入用户数据
	 *
	 * @param upload_file 上传的文件
	 */
	void import_account(MultipartFile upload_file);
	
	/**
	 * 用户登陆之后更新时间
	 * @param account
	 */
	void update_time(Account account);
}
